package com.suning.sawp.intf.precharge;

import java.io.File;
import java.util.List;

import org.apache.poi.ss.usermodel.Workbook;

import com.suning.sawp.dto.common.QueryResult;
import com.suning.sawp.dto.common.ReturnMsg;
import com.suning.sawp.dto.esb.PosSendSMSRtn;
import com.suning.sawp.dto.precharge.ChargeCashOrderInfo;
import com.suning.sawp.dto.precharge.ChargeOrderForPageRtn;
import com.suning.sawp.dto.precharge.ChargeOrderRtn;
import com.suning.sawp.dto.precharge.ClertChargeRecord;
import com.suning.sawp.dto.precharge.CommonRtn;
import com.suning.sawp.dto.precharge.PreChargeAct;
import com.suning.sawp.dto.precharge.PreChargeDetailRtn;
import com.suning.sawp.dto.precharge.PrechargeActRtn;
import com.suning.sawp.dto.precharge.PrechargeRemain;
import com.suning.sawp.dto.precharge.StoreChargeRecord;

/**
 * 
 * 店+预充值接口类<br> 
 * 〈功能详细描述〉
 *
 * @author Wuxiao
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface PreChargeService {
    
    /**
     * 
     * 功能描述: <br>
     * 查询店+ 员工指定日期现金充值记录
     *
     * @param chargeDate
     * @param employeeId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<ChargeCashOrderInfo>> queryOrderList(String chargeDate,String employeeId);

    /**
     * 
     * 功能描述: 获取门店充值规则<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<PreChargeDetailRtn> queryStoreActDetail(String storeCode);
    
    /**
     * 
     * 功能描述: 现金充值接口<br>
     * 〈功能详细描述〉
     *
     * @param telNo 手机号
     * @param storeCode  门店编码
     * @param userId 店员工号
     * @param ruleCode 充值规则
     * @param amount 充值金额 单位元
     * @param serialNo 客户端流水号
     * @param sign 签名
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<ChargeOrderRtn> payChargeOrder(String telNo,String storeCode,String userId,String ruleCode,String amount,String serialNo,String sign);
    
    /**
     * 
     * 功能描述: 校验充值时间<br>
     * 〈功能详细描述〉
     *
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean validChargeTime();
    
    /**
     * 
     * 功能描述: 校验用户名密码<br>
     * 〈功能详细描述〉
     *
     * @param userId
     * @param pwd
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    boolean validUserPwd(String userId,String pwd);
    
    /**
     * 
     * 功能描述: 重新发送充值成功短信<br>
     * 〈功能详细描述〉
     *
     * @param orderNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg sendMessage(String orderNo);
    
    /**
     * 
     * 功能描述: POS重发短息接口<br>
     * 〈功能详细描述〉
     *
     * @param serialNo 充值流水
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    PosSendSMSRtn posSendSMS(String serialNo);
    
    /**
     * 
     * 功能描述: 查询预充值剩余额度<br>
     * 〈功能详细描述〉
     *
     * @param storeCode 门店编码
     * @param couponAmount 券金额
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<PrechargeRemain> queryPrechargeRemain(String storeCode,String couponAmount);
    
    /**
     * 
     * 功能描述: 查询导出数量<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Integer queryExportCount(String startTime,String endTime);
    
    /**
     * 
     * 功能描述: 导出excel<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    File exportRecordExcel(String startTime,String endTime);
    
    /**
     * 功能描述: 查询现金充值记录<br>
     * 〈功能详细描述〉
     * 
     * @param startTimeStr
     * @param endTimeStr
     * @param regionCode
     * @param storeCode
     * @param startIndex
     * @param pageSize
     * @return
     */
    ReturnMsg<QueryResult<ChargeOrderForPageRtn>> queryOrderForPage(String startTimeStr, String endTimeStr, 
    		String regionCode, String storeCode, int startIndex, int pageSize, String activityName);
    
    /**
     * 
     * 功能描述: 导出现金充值记录统计<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @param activityName
     * @param regionCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    Workbook exportPrechargeStat(String activityName,String startTime,String endTime,String regionCode,String storeCode);
    
    /**
     * 
     * 功能描述: 校验导出现金充值记录统计是否超过最大值<br>
     * 〈功能详细描述〉
     *
     * @param startTime
     * @param endTime
     * @param activityName
     * @param regionCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<String> checkPrechargeStatExport(String activityName,String startTime,String endTime,String regionCode,String storeCode);
    
    /**
     * 
     * 功能描述: 查询券未过期的充值活动<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<List<PreChargeAct>> queryPrechargeActList(String storeCode);
    
    /**
     * 
     * 功能描述: 查询店员充值记录<br>
     * 〈功能详细描述〉
     *
     * @param ruleCode
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<ClertChargeRecord> queryClerkChargeRecord(String ruleCode,String storeCode,Integer pageNo,Integer pageSize,String staffId);
    /**
     * 
     * 功能描述: 查询门店预充值统计情况<br>
     * 〈功能详细描述〉
     *
     * @param sortColumn
     * @param sortType
     * @param storeCode
     * @param pageNo
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<StoreChargeRecord> queryStoreChargeRecord(Integer sortColumn,Integer sortType,String storeCode,Integer pageNo,Integer pageSize);
    /**
     * 
     * 功能描述:上下架门店活动 <br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param operateType 0 下架 1 上架
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<CommonRtn> updateActStatus(String storeCode,Integer status);
    /**
     * 
     * 功能描述: 后台查询促销规则活动列表<br>
     * 〈功能详细描述〉
     *
     * @param keyWord
     * @param promoStart
     * @param promoEnd
     * @param pageNum
     * @param pageSize
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<QueryResult<PrechargeActRtn>> queryActListPage(String keyWord,String promoStart,String promoEnd,Integer pageNum,Integer pageSize);
    /**
     * 
     * 功能描述: 修改促销规则状态<br>
     * 〈功能详细描述〉
     *
     * @param promotionId
     * @param storeCode
     * @param type
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    ReturnMsg<CommonRtn> updatePromoStatus(Integer promotionId,String storeCode,Integer type);
}
